#ifndef BARBERSHOP_H
#define BARBERSHOP_H

#include "Client.h"
#include <vector>
#include "Poco/Mutex.h"


using Poco::Mutex;
using namespace std;

enum
{
	IS_BARBER_SEAT_OCCUPIED,
	IS_ANY_WAITING_SEAT_FREE,
	IS_ANY_CLIENT_WAITING
};


class BarberShop
{
public:
	BarberShop(void);
	~BarberShop(void);

	bool ExecuteQueryAndLock(unsigned int pQueryType);

	void OccupyBarberChair();
	void ReleaseCurrentClient();
	void AddClientToWaitList();
	
private:
	bool m_bBarberChairOccupied;
	int m_iAvailableChairCount;
	
	Mutex *m_pkMutex;

	//pregunta si la silla del Barber esta ocupada, o sea, si el barbero esta durmiendo
	bool IsBarberSeatOccupied();
	//pregunta si hay alguna silla de espera libre
	bool IsAnyWaitingSeatFree();
	bool IsAnyClientAvailable();
};

#endif